import { uploadFile } from '@/api/platform/templateManage.js'
import { FILETYPE } from './constant'
import { Message } from "element-ui";

// 最终提交时给定数据中的排序赋值
export const getNewSort = (srotData) => {
  let _data = [...srotData];
  return _data.map((item, index) => {
    return {
      ...item,
      sort: index + 1
    }
  })
}

// 计算分页
export const getNumOfPage = (data, curPage)=> {
  const newData = data.filter(page => page.type == 0)
  const pageNo = newData.findIndex(page => page.sortId === curPage.sortId) + 1
  return {
    pageSize: newData.length,
    pageNo
  }
}

// 复制对象
export const copyObj = (obj) => {
  let newObj = {}
  for(let attr in obj) {
    if(typeof obj[attr] === 'object') {
      newObj[attr] = copyObj(obj[attr])
    } else {
      newObj[attr] = ''
    }
  }
  return newObj
}

// 解析富文本内容给img加样式
export const getParserHTML = (html) => {
  return html.replace(/<img/g, '<img style="max-width:100%;height:auto;display:block;"')
}

// 上传图片
export const getUploadImg = file => {
  if (!FILETYPE[file.type]) {
    Message.error('请上传图片格式文件')
    return
  }
  const fd = new FormData()
  fd.append('file', file)
  return uploadFile(fd).then(res => {
    return res.data.data.url
  })
}

/**
 *
 * @returns 返回两个方法,第一是转为例如1,2,3的拼串,第二个转为1#25~40#43#45~56#109,参数都为string类型
 */
export const transformTopics = () => {
  /**
   * 规则: 第一规则用'#'分割
   *      第二规则'~' 分割,1~20表示从1到20题
   * 连续第二规则展示形式1~20#25~40
   */
  function getTopic(data) {
    // 先根据#把字符串分割为数组
    let arr = data.split('#')
    // 遍历数组找到~的数据
    for (let i = 0; i < arr.length; i++) {
      if (arr[i].indexOf('~') > -1) {
        const [prev, next] = arr[i].split('~')
        let coverarr = []
        for (let j = parseInt(prev); j <= parseInt(next); j++) {
          coverarr.push(String(j))
        }
        arr[i] = coverarr
      }
    }
    return arr.flat().join()
  }
  function getRuleContent(data) {
    if (!Array.isArray(data)) {
      if(typeof data !== 'string') throw new Error('Invalid input: expected an array or a string');
      data = data.split(',')
    }
    data.sort((a, b) => a - b);

    let result = '';
    for (let i = 0; i < data.length; i++) {
      // 如果当前数字和下一个数字连续，则查找连续序列的结束位置
      if (+data[i] + 1 == data[i + 1]) {
        let end = i + 1;
        while (+data[end] + 1 == data[end + 1]) {
          end++;
        }
        // 添加连续序列到结果字符串
        result += data[i] + '~' + data[end] + '#';
        // 跳过已处理的连续序列
        i = end;
      } else {
        // 如果当前数字是单独的，则直接添加到结果字符串
        result += data[i] + '#';
      }
    }

    // 移除最后一个'#'并返回结果字符串
    return result.slice(0, -1);
  }
  return [
    getTopic,
    getRuleContent
  ]
}
